package com.example.musicplayer.model;
import com.example.musicplayer.myenum.EnumPlayState;

import android.media.*;
import android.view.*;

/**
 * 媒体类
 * @author hyh
 *
 */
public class Media
{
	private String path;//媒体文件路径
	private String fileName;//文件名
	private EnumPlayState state;//播放状态
	private MediaPlayer mediaPlayer; //媒体播放MediaPlayer类
	private MediaPlayer.OnCompletionListener listener;//媒体完成监听索引

	public Media()
	{
		mediaPlayer = new MediaPlayer();//初始化MediaPlayer类
		state = EnumPlayState.STOP;//初始化播放状态
	}
	
	public void setOnCompletionListener(MediaPlayer.OnCompletionListener listener)
	{
		this.listener = listener;
	}

	/**
	 * 获取媒体总时间
	 * @return 媒体总时间
	 */
	public int getTotalTime()
	{
		return mediaPlayer.getDuration();
	}

	//获取媒体宽度
	public float getWidth()
	{
		return mediaPlayer.getVideoWidth();
	}

	//获取媒体高度
	public float getHeight()
	{
		return mediaPlayer.getVideoHeight();
	}


	/**
	 * 获取媒体名
	 * @return 媒体名
	 */
	public String getFileName()
	{
		if (path != null)
		{
			int n=path.lastIndexOf("/");
			int m=path.lastIndexOf(".");
			fileName = path.substring(n + 1, m);
		}
		return fileName;
	}


	/**
	 * 设置播放时间
	 * @param seekTime 指定播放时间
	 */
	public void setSeekTime(int seekTime)
	{
		mediaPlayer.seekTo(seekTime);
	}


	/**
	 * 获取媒体播放时间
	 * @return 播放的时间
	 */
	public int getSeekTime()
	{
		int time=mediaPlayer.getCurrentPosition();
		if (time < 0 || time > 1000000000)
		{
			return 0;
		}
		else
		{
			return time;
		}
	}

	/**
	 * 设置媒体路径
	 * @param path 指定路径
	 * @throws Exception
	 */
	public void setPath(String path) throws Exception
	{
		this.path = path;
		setMediaResoure(path);
	}

	/**
	 * 获取媒体路径
	 * @return 媒体路径
	 */
	public String getPath()
	{
		return path;
	}

	/**
	 * 设置媒体播放状态
	 * @param state 媒体指定播放状态
	 */
	public void setState(EnumPlayState state)
	{
		this.state = state;
	}

	/**
	 * 获取媒体播放状态
	 * @return 媒体播放状态
	 */
	public EnumPlayState getState()
	{
		return state;
	}

	/**
	 * 设置媒体播放路径
	 * @param path 指定路径
	 * @throws Exception
	 */
	private void setMediaResoure(String path) throws Exception
	{
		mediaPlayer.reset();//重置MediaPlayer
		mediaPlayer.setDataSource(path);//设置媒体路径
		mediaPlayer.prepare();//准备媒体
	}

	/**
	 * 设置媒体播放显示SurfaceHolder
	 * @param surfaceHolder
	 */
	public void setDisplay(SurfaceHolder surfaceHolder)
	{
		mediaPlayer.setDisplay(surfaceHolder);
	}

	/**
	 * 播放媒体
	 */
	public void play()
	{
		mediaPlayer.start();//开始播放媒体
		//设置媒体播放完成监听
		mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){

				@Override
				public void onCompletion(MediaPlayer p1)
				{
					if (listener != null)
					{
						listener.onCompletion(p1);
					}
				}
			});
		setState(EnumPlayState.PLAY);//设置媒体问播放状态
	}

	/**
	 * 重置
	 */
	public void reset(){
		mediaPlayer.reset();
	}
	
	/**
	 * 暂停媒体播放
	 */
	public void pause()
	{
		mediaPlayer.pause();
		setState(EnumPlayState.PAUSE);
	}

	/**
	 * 停止媒体播放
	 */
	public void stop()
	{
		mediaPlayer.stop();
		setState(EnumPlayState.STOP);
	}

	/**
	 * 释放媒体
	 */
	public void release()
	{
		mediaPlayer.release();
		setState(EnumPlayState.STOP);
	}

	/**
	 * 重新创建MediaPlayer对象
	 */
	public void reCreate()
	{
		mediaPlayer = new MediaPlayer();
	}

}
